The Java language, and it's associated platforms the Java Standard Edition platform and the Java Enterprise Edition platform, have established themselves as industry standard environments for the deployment of a broad variety of applications. In particular, the Java Enterprise Edition platform is a mature environment used by many of the world's major enterprises for the creation and execution of their mission critical applications. Application server platforms such as, but not limited to, the Java Enterprise Edition platform, are typically composed of, and provide, a broad set of Services, such as Application Programming Interfaces (e.g., Enterprise JavaBeans, Servlets, JavaServer Pages, JDBC, and JMS), and other capabilities such as security, high availability, transaction processing etc, that are consumed either directly or indirectly by software applications that are written against those APIs.
Today, most such platform products and technologies are delivered monolithically, i.e. their implementations are packaged as a collection of Java class files within one or more Java ARchive files (JARs), which are in turn invoked by the Java Virtual Machine during runtime to provide the actual, executable, implementation of these application services. A significant and costly drawback of this monolithic approach to packaging and invocation is that the resulting runtime environment of the application server (i.e. the Java Virtual Machine or another virtual machine environment) consumes significant amounts of both physical and virtual memory, and CPU processing time, independently of the actual requirements of the particular set of applications that is running therein. This costly space/time/complexity inefficiency is the result of the monolithic and static packaging of the individual components and services that comprise the application server or Java Enterprise Edition platform.
Current available technologies that are designed to undertake this optimization are limited, in that their typical usage is to re-package the implementations of an application server's components into bundles, and to then load/initialize a subset of all the possible bundles at application server startup from a static, externally defined, application server bundle/component initialization/configuration description. For example, versions of both the JBoss and IBM WebSphere application servers use just such a mechanism.